package com.jt.demo8_anno;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

/**
 * 1.该类主要测试注解的注入方式
 * 2.练习对象的嵌套关系
 * 3.注解的写法与xml写法的原理相同,形式不同
 */
@Component //key : user,value : 反射后的对象
public class User { //用户
    public Pet getPet() {
        return pet;
    }

    public void setPet(Pet pet) {
        this.pet = pet;
    }

    /**
     * 注解说明 :
     *      @Autowired : 自动注入
     * 规则 :
     *      1.默认条件下使用set方式注入,按照类型匹配
     *      2.set注入也可以按照name名称进行匹配
     *      3.只要使用注解,默认自动生成SetXXX方法
     * 实现原理 :
     *      1.类型匹配 : 如果是接口,则自动匹配其实现类对象,本练习中为Tiger对象
     *      2.name名称匹配 : 根据spring中的key注入
     * 注解说明 :
     *      @Qualifier必须和@Autowired连用,并且需要指定value的名称,就是spring中的key
     * 准则 :
     *      一般的条件下,spring都是单实现
     */
    @Autowired
    @Qualifier(value = "pig")
    private Pet pet;

    public void hello() {
        pet.hello();
    }
}
